一、Spring
Spring的核心是IoC/DI的容器,它可以帮程序员完成组件之间的依赖关系注入,使得组件之间的依赖达到最小,进而提高组件的重用性,Spring是个低侵入性(invasive)的框架,Spring中的组件并不会意识到它正置身于Spring中,这使得组件可以轻易的从框架中脱离,而几乎不用任何修改,反过来说,组件也可以简单的方式加入至框架中,使得组件甚至框架的整合变得容易。
Spring最为人重视的另一方面是支持AOP(Aspect-Oriented Programming),然而AOP框架只是Spring支持的一个子框架,说Spring框架是AOP框架并不是一件适当的描述,人们对于新奇的 AOP关注映射至Spring上,使得人们对于Spring的关注集中在它的AOP框架上,虽然有所误解,但也突显了Spring的另一个令人关注的特色。
Spring是一个开源框架,是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架。
(1)通过控制反转(IOC)达到松耦合,IOC也就是把控制权交出去,在使用中直接得到对象
(2)提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发(例如,商品的入库和出库是业务逻辑,而商品的入库和出库需要统一的日志记录和事务的管理是系统服务,与具体的业务无关,也就是无论业务如何,都要用到系统服务)
(3)包含并管理应用对象的配置和生命周期,也就是容器的作用
(4)将简单的组件配置、组合成为复杂的应用,也就是框架的作用
框架与类库的区别:
框架一般是封装了逻辑、高内聚的,类库则是松散的工具组合
框架专注于某一领域,类库则是更通用的
Spring是一系列轻量级Java EE框架的集合:核心容器,Spring上下文,Spring AOP, Spring DAO, Spring ORM, Spring Web, Spring MVC。
IOC:控制反转,控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护,也就是不显示的进行new创建对象
DI(依赖注入):是控制反转的一种实现方式,由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。也就是获得依赖对象的过程由自身管理变为由IOC容器主动注入。通过反射机制实现。
控制反转:
控制反转的目的:创建对象并组装对象之间的关系。
IOC容器初始化时创建一系列对象,并把对象之间的依赖关系通过注入的方式组织起来,当一个类A中有另外一个B,实例化时,先实例化A这个对象,再实例化B这个对象,然后把B这个对象赋值给A,这就是IOC的组装对象,具体如下图
图解:业务对象进入Spring容器,然后通过配置的元数据,生产出符合我们需要的对象,当我们需要用的时候,直接从Spring容器中取出来用即可,这也就是IOC,应用程序只关心对象的使用,而不关心对象的创建
在IOC容器中,把所有对象称为Bean,Spring利用Bean来管理这些对象,Spring对于Bean和其他的使用有两种方式,一种是基于xml的配置,一种是注解方式。
依赖注入:
借鉴http://blog.csdn.net/zhoudaxia/article/details/31763677
控制反转:把传统上由程序代码直接操控的对象的调用权交给外部容器,通过容器来实现对象组件的装配和管理。所谓的“控制反转”就是组件对象的控制权转移了,从程序代码本身转移到了外部容器。
实现控制反转的两种方式:依赖注入和依赖查找。
依赖注入有四种实现方式:
1.基于接口:实现特定接口以供外部容器注入所依赖类型的对象,接口中定义要注入依赖对象的方法。
2.基于setter方法:实现特定属性的public set方法,来让外部容器调用,以传入所依赖类型的对象。
3.基于构造函数:实现特定参数的构造函数,在新建对象时传入所依赖类型的对象。
4.基于注解:基于Java的注解功能,在私有变量前加“@Autowired”等注解,不需要显式的定义以上三种代码,便可以让外部容器传入对应的对象。该方案相当于定义了public 的set方法,但是因为没有真正的set方法,从而不会为了实现依赖注入导致暴露了不该暴露的接口(因为set方法只想让容器访问来注入而不希望其他依赖此类的对象访问)。
AOP
面向切面编程,